package 练习10_synchronized锁的对象;

/**
 * 同步代码块（对象锁）
 * @ClassName: SyncDemo01
 * @Author: AllenSun
 * @Date: 2023/3/26 上午12:04
 */
public class SyncDemo02 implements Runnable {

    public static void main(String[] args) {
        SyncDemo02 demo02 = new SyncDemo02();
        new Thread(demo02,"线程1").start();
        new Thread(demo02,"线程2").start();

        SyncDemo02 demo03 = new SyncDemo02();
        new Thread(demo02,"线程3").start();
        // synchronized锁的是对象demo02，是锁不住新对象demo03的
        new Thread(demo03,"线程4").start();
    }

    @Override
    public void run() {
        method();
    }

    public synchronized void method() {
        //指获取类SyncDemo02创建的实例对象demo02中的内置锁（锁定当前代码块执行者）
        //可以看到线程2必须要等到线程1释放了该锁后，才能执行
        System.out.println(Thread.currentThread().getName()+"开始执行");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName()+"执行结束");
    }
}
